<?php
/**
 * 广东、上海十一选五开奖
 * @param string $target
 */
function open_syxw_1($target, $maxRow=20){
    $str = file_get_contents('http://chart.cp.360.cn/zst/' . $target . '/?sortFlag=1&r=0.3713223679925959#roll_132');
    $str = explode("id='data-tab'",$str);
    $str = explode('</tbody>',$str[1]);
    $str = str_replace("<td colspan='99' class='tdbck'></td>",'',$str[0]);
    preg_match_all('/<td[^>]*>(.*?)<\/td>/',$str,$tmp);

    // 开奖结果集
    $openData = array();
    // $maxRow取最近5期开奖，防止漏更新
    for($i = 0; $i < count($tmp[1]); $i++) {
        //	期号
        $qihao = trim($tmp[1][$i]);
        if(preg_match('/^[\d]{8}-[\d]{2}$/',$qihao) && $maxRow > 0){
            //	开奖号
            $num = strip_tags($tmp[1][$i+2]);
            $num = str_replace(' ',',',$num);
            $openData[] = array('expect' => str_replace('-', '', $qihao), 'opencode' => $num);
            $maxRow--;
        }
    }
    return $openData;
}

/**
 * 山东、江西十一选五开奖（快开彩种开奖采集）
 * @param 标识标签 $target                ： 该链接中用标识来获取不同彩种的开奖内容
 * @param 该彩种的td数 $tdNums            ： 抓取页面内容中， 不同的彩种表格格式有区别，这里指明多少个td换行，以确保获取后续的内容位置正确
 * @param 中奖号码中截断数量 $splitNums   ： 开奖号码不同，有的带0，有的不带， 并且需要转换成系统中开奖的格式， 每个号以英文逗号隔开，以确定每个号的位置
 * @param $expectPrefix: 期号前缀（系统中彩种的期号不一致导致）
 */
function open_kkcz($target, $tdNums, $splitNums, $maxRow=20, $expectPrefix=''){
    $url = 'https://fx.cp2y.com/' . $target . '/';
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    $str = curl_exec($curl);
    curl_close($curl);
    $str = explode('<table class="kj-detail-table tac w100p bdb" cellspacing="0" cellpadding="0">',$str);
    preg_match_all('/<td[^>]*>(.*?)<\/td>/',$str[1],$tmp);
    $tmp = $tmp[0];
    // 开奖结果集
    $openData = array();
    // 行控制判断
    $rowIndex =  0;
    foreach ($tmp as $k => $v){
        // 换行
        if ($rowIndex == $tdNums) {
            $rowIndex = 0;
            $maxRow--;
        }
        if (!$rowIndex){
            $qihao = $expectPrefix . intval(strip_tags($v));   // 加20前缀是因为抓取的期号信息不带20开头， 而系统数据库中的期号都是完整时间+批次数， 所以这里补全
            $code  = implode(',', str_split(strip_tags($tmp[$k + 1]), $splitNums));
            $openData[] = array('expect' => str_replace('-', '', $qihao), 'opencode' => $code);
        }
        if ($maxRow == 1) break;
        $rowIndex++;
    }
    return $openData;
}

function open_xjssc($maxRow){
    $url = 'https://shishicai.cjcp.com.cn/xinjiang/kaijiang/';
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    $str = curl_exec($curl);
    curl_close($curl);
    $tableData = explode('class="kjjg_table"', $str);
    preg_match_all('/<td>(.*?)<\/td>/',$tableData[1],$tmp);
    $openData  = array();
    // 行控制判断
    $rowIndex  =  1;
    foreach ($tmp[1] as $k => $v){
        $v = strip_tags($v);
        switch ($rowIndex){
            case '1':
                $openData[$maxRow]['expect']   = substr($v, 0, 11);
                break;
            case '3':
                $codeStr = '';
                for ($i = 0; $i < strlen($v); $i++){
                    $codeStr .= substr($v, $i, 1);
                    if($i < (strlen($v) - 1) ) $codeStr .= ',';
                }
                $openData[$maxRow]['opencode'] = $codeStr;
                break;
        }
        if ($rowIndex == 3) {
            $rowIndex = 0;
            $maxRow--;
        }
        if ($maxRow == 1) break;
        $rowIndex++;
    }
    return $openData;
}

// 快三开奖抓取有点莫名问题
function open_kkcz1($target, $tdNums, $splitNums, $maxRow='', $expectPrefix=''){
    $url = 'https://fx.cp2y.com/' . $target . '/';
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $url);
    curl_setopt($curl, CURLOPT_HEADER, false);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    $str = curl_exec($curl);
    curl_close($curl);
    $str = explode('<table class="kj-detail-table tac w100p bdb" cellspacing="0" cellpadding="0">',$str);
    $trData = explode('</tr>', $str[1]);
    // 开奖结果集
    $openData  = array();
    // 行控制判断
    $rowIndex  =  0;
    // 去掉首部标题栏， 去掉尾部其他残余。
    array_pop($trData);
    array_shift($trData);
    $tmp       = array();
    $arrKey    = array('expect', 'code');
    foreach ($trData as $tk => $tv){
        $tmp = array();
        // 换行
        if ($rowIndex == $tdNums) {
            $rowIndex = 0;
            $maxRow--;
        }
        $tv = str_replace(substr($tv, stripos($tv, '<!--'), stripos($tv, '-->') - stripos($tv, '<!--') +3 ), '', $tv);
        $tdData = explode('<td>', $tv);
        foreach ($tdData as $tk1 => $tv1){
            $tv1 = trim(strip_tags($tv1));
            if($tv1 && $arrKey[$tk1 - 1]){
                if ($arrKey[$tk1 - 1] == 'code'){
                    $tv1 = implode(',', str_split($tv1, $splitNums));
                }else{
                    // 加20前缀是因为抓取的期号信息不带20开头， 而系统数据库中的期号都是完整时间+批次数， 所以这里补全
                    $tv1 = $expectPrefix . intval(strip_tags($tv1));   
                }
                $tmp[$arrKey[$tk1 - 1]] = $tv1;
            }
        }
        $openData[] = $tmp;
        if ($maxRow == 1) break;
        $rowIndex++;
    }
    return $openData;
}

/**
 * 从kaijiang.500.com上抓取开奖结果
 * @param string $name:彩种标识
 * @param int    $maxRow: 获取到多少条开奖记录
 * @param string $prefix: 补全开奖号前缀
 * @param string $dateline: 时间标识
 */
function catchK3_1 ($name, $maxRow=5, $prefix='', $dateline=''){
    $dateline = $dateline ? $dateline : date('Ymd');
    $url      = 'http://kaijiang.500.com/static/info/kaijiang/xml/' . $name . '/' . $dateline . '.xml';
    // 内容转换成常规XML来解析
    $reader   = new XMLReader();
    $xmlData  = $reader->open($url);
    $openCode = array();
    while ($reader->read()){
        if ( empty($reader->getAttribute('expect')) ) continue;
        if ($maxRow < 1) break;
        $openCode[]   = array(
            'expect'    => $prefix . $reader->getAttribute('expect'),
            'opencode'  => $reader->getAttribute('opencode'),
        );
        $maxRow--;
    }
    return $openCode;
}


// ============================================================================================================================
/**
 * @param int    $period_id : 指定写入开奖号的期号id
 * @param string $openCode  : 写入的开奖号
 */
function setOpenCode($period_id, $openCode, $db){
    $table      = Table('lottery_k3');
    // 检查指定的期号信息是否正常
    $sql        = 'SELECT `code` FROM ' . $table . ' WHERE id = ' . $period_id;
    $periodInfo = $db->getrow($sql);
    if ($periodInfo['code']) return;
    // 写入开奖号
    $sql        = 'UPDATE ' . $table . ' SET `code` = "' . $openCode . '", `opentime` = "' . time() . '", `status` = 1 WHERE id = ' . $period_id;
    $db->exec($sql);
}
/**
 * get_combinations 获取指定字符串的所有组合
 * @param string $str 目标字符串
 * @param array $comb 组合容器
 * @return bool | array
 * @author Mike Lee
 */
function get_combinations($arr, &$comb = array()) {
    // 如果只剩5个数了
    if (count($arr) == 5) {
        $comb[] = $arr;
        return;
    }
    $fitst = array_shift($arr);
    for($i = 0; $i < count($arr); $i++){
        for($i1 = $i + 1; $i1 < count($arr); $i1++){
            for($i2 = $i1 + 1; $i2 < count($arr); $i2++){
                for($i3 = $i2 + 1; $i3 < count($arr); $i3++){
                    $tmp = array($fitst, $arr[$i], $arr[$i1], $arr[$i2], $arr[$i3]);
                    $comb[] = $tmp;
                }
            }
        }
    }
    get_combinations($arr, $comb);
}

function openCodeLog($logDir, $fileName,  $str){
    // 检查路劲是否存在
    if (!file_exists($logDir)){
        mkdir($logDir, 0777, true);
    }
    $file = fopen($logDir . $fileName, "a+");
    fwrite($file, $str . "\r\n");
    fclose($file);
}